"""
(1).判断两个Person对象的内容是否相等,如果两个Person对象的各个属性值都是一样的,则返回true，否则返回false
(2).Person类,属性(name , age , gender)
"""
class Animal:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

class Person:
    def __init__(self , name , age , gender):
        self.name = name
        self.age = age
        self.gender = gender

    #判断两个Person对象的内容是否相等
    #如果两个Person对象的各个属性值都是一样的,则返回true,反之false
    def __eq__(self, other):
        #这里需要判断当前对象的类型  不同的类型返回相同的结果是不对的
        if isinstance(other , Person):
            return self.name == other.name and \
                    self.age == other.age and \
                    self.gender == other.gender
        return False

    def __lt__(self, other):
        print("执行了__lt__")
        #判断other是不是Person
        if isinstance(other , Person):
            return self.age < other.age
        return "类型不一致,不能比较"

    #重写 __le__
    def __le__(self, other):
        #判断other是不是Person
        if isinstance(other , Person):
            return self.age <= other.age
        return "类型不一致,不能比较"

    #重写 __ne__
    def __ne__(self, other):
        return not self.__eq__(other)

#没用重写 __eq__之前， == 比较的是内存地址
p1 = Person("smith" , 20 , "男")
p2 = Person("smith" , 20 , "男")
a = Animal("smith" , 20 , "男")
#两个对象是两个地址 所以是不相等的
# print(f"p1 == p2 : {p1 == p2} , {id(p1)} , {id(p2)}")
#
# print(f"p1 == a : {p1 == a} , {id(p1)} , {id(a)}")
#只能是两个对象进行比较的时候才会执行
# print(p1 < p2)
# print(p1 <= p2)
print(p1 != p2)

